package com.zsix.system.strategy.processVariables;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.zsix.common.dto.controllerParams.ProceParams;
import com.zsix.common.entity.taskAssignee.GenerWork;
import org.springframework.stereotype.Component;

import java.util.HashMap;

@Component
public class FormVariables implements ProcessVariableStrategy {
    /**
     * 参数赋值
     * @param generWork
     * @param proceParams
     * @return
     */
    @Override
    public HashMap<String,Object> SetParams(GenerWork generWork,
             ProceParams proceParams,HashMap<String,Object> hashMap,String processKey,String task_def_key
            ,String BusinessKey){

        JSONObject dataJson= JSON.parseObject(generWork.getData_json());
        //获取参数值
        String paramKey=proceParams.getParamValue();
        //如果包括“.” 说明是子表的字段
        if(paramKey.contains(".")){
            //截取子表名称
            String[] subKey=paramKey.split(",");
            String subTable=dataJson.getString(subKey[0]);
            //获取子表数据
            JSONObject subDataJson=JSONObject.parseObject(subTable);
            //设置子表参数
            if(proceParams.getValueType().equals("2"))//布尔型
                hashMap.put(proceParams.getParamKey(), subDataJson.getBooleanValue(subKey[1]));
            else if(proceParams.getValueType().equals("1"))//数值型
                hashMap.put(proceParams.getParamKey(), subDataJson.getFloatValue(subKey[1]));
            else//字符型
                hashMap.put(proceParams.getParamKey(), subDataJson.getString(subKey[1]));

        }
        else{
            if(proceParams.getValueType().equals("2"))//布尔型
                hashMap.put(proceParams.getParamKey(), dataJson.getBooleanValue(paramKey));
            else if(proceParams.getValueType().equals("1"))//数值型
                hashMap.put(proceParams.getParamKey(), dataJson.getFloatValue(paramKey));
            else//字符型
                hashMap.put(proceParams.getParamKey(), dataJson.getString(paramKey));

        }
        return hashMap;
    }
    @Override
    public String getType(){
        return "0";
    }
}
